home *** CD-ROM | disk | FTP | other *** search
/ Whiteline: delta / whiteline CD Series - delta.iso / systems / minix / bash1141.zoo / builtins / gem.def
Text File  |  1994-07-26  |  2KB  |  88 lines

  1. This file is gem.def, from which is created gem.c.
  2. It implements the builtin "gem" in Bash.
  3.  
  4. $PRODUCES gem.c
  5.  
  6. $BUILTIN gem
  7. $DEPENDS_ON atarist
  8. $FUNCTION gem_builtin
  9. $SHORT_DOC gem [command [arg ...]]
  10. Runs COMMAND with ARGS with the mouse cursor turned on.  Use this to
  11. run commands which need the mouse.
  12. $END
  13.  
  14. #if defined (HAVE_STRING_H)
  15. #  include <string.h>
  16. #else /* !HAVE_STRING_H */
  17. #  include <strings.h>
  18. #endif /* !HAVE_STRING_H */
  19.  
  20. #include "../shell.h"
  21.  
  22. #if defined (atarist)
  23.  
  24. #include <osbind.h>
  25. #include <linea.h>
  26.  
  27. extern int subshell_environment;
  28.  
  29. static void restore_mouse ();
  30.  
  31. /* Run the commands mentioned in LIST with the mouse cursor turned on. */
  32. int
  33. gem_builtin (list)
  34.      WORD_LIST *list;
  35. {
  36.   int result;
  37.  
  38.   if (!list)
  39.     return (EXECUTION_SUCCESS);
  40.  
  41.   begin_unwind_frame ("gem_builtin");
  42.  
  43.   /* We don't want this to be reparsed (consider gem echo 'foo &'), so
  44.      just make a simple_command structure and call execute_command with it. */
  45.   {
  46.     COMMAND *command;
  47.  
  48.     command = make_bare_simple_command ();
  49.     command->value.Simple->words = (WORD_LIST *)copy_word_list (list);
  50.     command->value.Simple->redirects = (REDIRECT *)NULL;
  51.     command->flags |= (CMD_NO_FUNCTIONS | CMD_INHIBIT_EXPANSION);
  52.     command->value.Simple->flags |= (CMD_NO_FUNCTIONS | CMD_INHIBIT_EXPANSION);
  53.     /* If we're in a subshell, see if we can get away without forking
  54.        again, since we've already forked to run this builtin. */
  55.     if (subshell_environment)
  56.       {
  57.     command->flags |= CMD_NO_FORK;
  58.     command->value.Simple->flags |= CMD_NO_FORK;
  59.       }
  60.     add_unwind_protect ((char *)dispose_command, command);
  61.     Bconout (2, 27);
  62.     Bconout (2, 'f');
  63.     (void) linea0 ();
  64.     {
  65.       short zero = 0;
  66.       INTIN = &zero;
  67.       (void) linea9 ();
  68.     }
  69.     add_unwind_protect ((Function *)restore_mouse, 0);
  70.     result = execute_command (command);
  71.   }
  72.  
  73.   run_unwind_frame ("gem_builtin");
  74.  
  75.   return (result);
  76. }
  77.  
  78. /* Restore the mouse cursor. */
  79. static void
  80. restore_mouse ()
  81. {
  82.   (void) lineaa ();
  83.   Bconout (2, 27);
  84.   Bconout (2, 'e');
  85. }
  86.  
  87. #endif /* atarist */
  88.